<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // // 声明式的函数 
        //     function fn1(num1,num2){
        //         return num1+num2;
        //     }
        // // 赋值式的函数 
        //     var fn2 = function(num3,num4){
        //         return num3 * num4;
        //     }   

        // //对象内的函数
        //     var obj = {
        //         name:'张三',
        //         sing:function(){
        //             return this.name + '正在唱征服';
        //         }
        //     }
        // // 定时器 
        //     setTimeout(function(){
        //         alert(666);
        //     },1000);

        // // 事件处理函数

        //     window.onclick = function(){
        //         console.log('正在点击');
        //     }

        // // 数组的高级函数 
        // var arrs = ['a','b','c','d'];
        // arrs.forEach(function(item){
        //     console.log(item);
        // })


        // // 箭头函数 => es6 推出的新的书写方式  
        // // 变简单了  

        // // 语法: () => {}
        // // () 写形参的地方 
        // // => 箭头标志  
        // // {} 写代码的地方 


        // // 声明式的函数  

        // var fn11 = (num1,num2)=>{
        //     // 两个及以上的形参 小括号不能省略 
        //     return num1+num2;
        // }


        // var fn111 = (num1,num2)=> num1+num2;
        // console.log(fn111(100,999));
        // // 当 {}代码只有一行  {}可以省略 return 也可以省略 
        // // 上面 自动的将num1+num2 返回 

        // // 赋值式的函数 
        // var fn12 = (num3,num4) =>{
        //         return num3 * num4;
        // }  
        
        // // 对象内的函数

        // var obj1 = {
        //         name:'张三',
        //         sing:()=>{
        //             return this.name + '正在唱征服';
        //         }
        //     }


        // // 定时器函数 
        // setTimeout(()=>{alert(888)},1000);
        // // 因为没有形参 所以小括号不能省
        
        //  // 事件处理函数

        //  window.onclick = ()=>{
        //         console.log('正在点击');
        // }


        // // 数组高级方法

        // var arrs1 = ['a','b','c','d'];
        // arrs1.forEach(item=>{

        //     // 因为只有一个形参 所以() 可以省略
        //     console.log(item);
        // })


        // function fn66(){
        //     console.log(arguments)
        //     var sums=0;
        //     for(var i=0;i<arguments.length;i++){
        //         sums += arguments[i]
        //     }
        //     return sums;
        // }

        // console.log(fn66(10,5,23,19,43,27));;


        // var fn666 = ()=>{
        //     console.log(arguments);
        // }

        // console.log(fn666(10,5,23,19,43,27));;

        // function jiecheng(num){
        //     if(num == 1) return 1;

        //     return num*arguments.callee(num-1);
        
        // }

        // 箭头函数 没有arguments 也没有 arguments.callee



        // this 

        // 全局  this 
        // 声明式函数  window 
        // 对象函数    对象本身 
        // 定时器    window 
        // 事件处理函数   事件源  



        // var fn77 = ()=>{
        //     alert(this); // window
        // }

        // 父作用域是 全局作用域 全局作用域this 是window 
        // 所以箭头函数 this 就是window

        // fn77()


        // document.onclick = function(){
        //     console.log(this);//#document
        //     var fn88 = ()=>{
                    // 父作用域this 是#document 
                    // 箭头函数的this 就是#document
        //         console.log('我是箭头函数的this',this); // #document

        //     }
        //     fn88()
        // }

        setTimeout(function(){
            console.log(this); // window
            var fn99 = ()=>{
                // 父作用域this 是 window 
                // 这个箭头函数this 也是window 
                console.log('我是定时器中箭头函数的this',this); // window

            }
            fn99()
        },1000);



        // 箭头函数没有自己的this 
        // 它的this取决于 父作用域的this 
        // 父作用域this 是谁  箭头函数的this 就是谁 




    </script>
</body>
</html>